package com.ftg.learn.chapter10;


/**
 * 数组扩容问题
 *   数组 ： 扩容 线性表(顺序)
 *   5   6
 * @author KangJx
 * @date 2021/7/16
 */
public class ArrayExpend {

    int[] as = new int[5];
    int index = 0;
    //系数
    double flag = 0.75;

    /**
     * 把op存储到as里面
     * @param op
     */
    public void add(int op){

        int yu = (int)(as.length * flag);
        //局部变量 方法 重新创建
        if(index == yu){
            //扩容  1.5
            int[] newAs = new int[as.length + (as.length >> 1)];
            //迁移
            for(int i = 0,len = as.length;i<len;i++){
                newAs[i] = as[i];
            }
            as = newAs;
        }
        as[index++] = op;
    }

    //删除

    /**
     * 按下标删除操作
     * @param ix 下标
     */
    public void del(int ix) {
        if(ix <= index){
            for(int i = ix;i < index;i++){
                as[i] = as[i+1];
            }
        }
        index--;
    }

    /**
     * [2,6)
     * 2 3 4 5 6
     * 删除指定的begin--end的下标
     * @param begin  开始下标
     * @param end  结束下标
     */
    public void del(int begin,int end) {
        int between = end - begin;
        if(begin >= 0 && begin < end && end < index){
            for(int i = end;i < index;i++){
                as[begin++] = as[i];
            }
            index-=between;
        }
    }

    /**
     * 返回数据当中有效数据的个数
     * @return
     */
    public int length(){
        return index;
    }

    public void update(int index,int obj){
        if(index > 0 && index < length()){
            as[index] = obj;
        }
    }

    public int[] show(){
        int[] newAs = new int[length()];
        for(int i = 0,len = newAs.length;i < len;i++){
            newAs[i] = as[i];
        }
        return newAs;
    }

    //crud : create read update delete
}
